﻿#pragma once
#include<vector>
#include<QString>
#include "dataStructUI.h"

using namespace std;

//储存前端与后端用到的数据
struct BasicData {
	BasicData() {}
	~BasicData() {}

	//1.状态数据
	bool acquired_ = false;			//记录是否成功获取数据，成功为true
	bool runFinished_ = false;
	QPointF margin = QPointF(20, 20);	//与坐标轴保持的边距

	QPointF minPt = QPointF(-2, -2);	    //图形中最小的xy坐标
	QPointF maxPt = QPointF(-1, -1);        //图形中最大的xy坐标

	int m_pinSum = 0;

	//2.绘制的背景（读取出来的数据，算法执行所用的数据）
	vector<QString> m_mapSymbols;
	vector<vector<LineUI>> m_net;             //背景网格，0竖线,1横线（1.布线赋值）

	//3.绘制障碍物
	vector<QPointF> m_Pts;                    //背景障碍物（1.布线赋值）

	//4.算法数据
	vector<LineUI> m_flyLines;                      //一条折线（1.布线赋值，用作显示飞线）   【不可编辑】
	vector<QPointF> m_cornerPts;					//计划点
	vector<vector<LineUI>> m_wires;                 //折线集合（1,2.推线与后处理赋值）       【寻路结果，推线，后处理】
	vector<vector<QPointF>> m_wiresPts;				//路径点集合（1,2.推线与后处理赋值）
	vector<vector<QPointF>> m_resWiresPts;
	double m_totalWireLength = 0;

	vector<vector<vector<LineUI>>> m_polyLiness;    //多个折线集合

	vector<LineUI> m_polygon;                   //一个多边形
	vector<vector<LineUI>> m_polygons;	        //多边形群
	vector<vector<vector<LineUI>>> m_polygonss;	//多层多边形群（2.赋值）                     【】


	// 自定义数据类型
	vector<vector<LineUI>> fixLines_;
	vector<vector<LineUI>> lockLines_;
	vector<vector<double>> diffGaps_;
	vector<vector<double>> spaces_;
	double miter = 1;
	vector<vector<double>> obssMinMaxXY;	//障碍物外包盒
	vector<int> diffInfo_dirs;              //0(false)表示另一根线在右边，1(true)表示另一根线在左边，2表示非差分线（以左下角为原点，右边为x正方向，上面为y正方向）
	vector<vector<LineUI>> hugSegmentsBeforeSacled_;      //缩放之前的原始数据，此数据已经经过了后处理


	//3.前端数据（用于绘图、展示的数据）


	void clear() {
		//将上述所有数据复位，清空所有容器
		//1.状态数据
		acquired_ = false;			//记录是否成功获取数据，成功为true
		runFinished_ = false;
		margin = QPointF(20, 20);	//与坐标轴保持的边距

		minPt = QPointF(-2, -2);	    //图形中最小的xy坐标
		maxPt = QPointF(-1, -1);        //图形中最大的xy坐标

		//2.绘制的背景（读取出来的数据，算法执行所用的数据）
		m_mapSymbols.clear();
		m_net.clear();             //背景网格，0竖线,1横线（1.布线赋值）

		//3.绘制障碍物
		m_Pts.clear();                    //背景障碍物（1.布线赋值）

		//4.算法数据
		m_flyLines.clear();                      //一条折线（1.布线赋值，用作显示飞线）   【不可编辑】
		m_cornerPts.clear();					//计划点
		m_wires.clear();                 //折线集合（1,2.推线与后处理赋值）       【寻路结果，推线，后处理】
		m_wiresPts.clear();				//路径点集合（1,2.推线与后处理赋值）
		m_totalWireLength = 0;

		m_polyLiness.clear();    //多个折线集合

		m_polygon.clear();                   //一个多边形
		m_polygons.clear();	        //多边形群
		m_polygonss.clear();	//多层多边形群（2.赋值）                     【】


		// 自定义数据类型
		fixLines_.clear();
		lockLines_.clear();
		diffGaps_.clear();
		spaces_.clear();
		miter = 1;
		obssMinMaxXY.clear();	//障碍物外包盒
		diffInfo_dirs.clear();              //0(false)表示另一根线在右边，1(true)表示另一根线在左边，2表示非差分线（以左下角为原点，右边为x正方向，上面为y正方向）
		hugSegmentsBeforeSacled_.clear();      //缩放之前的原始数据，此数据已经经过了后处理

	}
};
